//
// TestPlainVanillaLoader.cpp
//
// Copyright (c) 2007-2010 Lukhnos D. Liu (http://lukhnos.org)
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without
// restriction, including without limitation the rights to use,
// copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following
// conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//

#include "TestPlainVanillaLoader.h"
#include <iostream>

using namespace OpenVanilla;

int TestPlainVanillaLoader(const char* loadPath)
{
    cout << "using path: " << loadPath << endl;

    vector<string> modulePackageLoadPaths;
    modulePackageLoadPaths.push_back(loadPath);
    PVLoaderPolicy* loaderPolicy = new PVLoaderPolicy(modulePackageLoadPaths);
    PVLoaderService* loaderService = new PVLoaderService;
    
    #if defined(__APPLE__)
        PVBundleLoadingSystem* dynamicLoadingSystem = new PVBundleLoadingSystem(loaderPolicy);
    #elif defined(WIN32)
	PVDLLLoadingSystem* dynamicLoadingSystem = new PVDLLLoadingSystem(loaderPolicy);
	#else
		#error Sorry, nothing for Linux yet
	#endif
    
    
    vector<PVModulePackageLoadingSystem*> loadingSystems;
    loadingSystems.push_back(dynamicLoadingSystem);
    
    PVLoader* loader = new PVLoader(loaderPolicy, loaderService, loadingSystems);


    PVLoaderContext* context = loader->createContext();
    OVKey key = loaderService->makeOVKey('a');
    bool handled = context->handleKeyEvent(&key);
    loaderService->logger("loader test") << "context returns " << handled << endl;
    loaderService->logger("loader test") << "Deleteing everything." << endl;
    delete context;
        
    delete loader;
    delete dynamicLoadingSystem;
    delete loaderService;
    delete loaderPolicy;    

    return 0;
}
